﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;

namespace LCTMoodle.Service
{
    public class NguoiDungService : Service
    {
        /// <summary>
        /// Lấy người dùng theo mã người dùng
        /// </summary>
        /// <param name="maNguoiDung">Mã người dùng</param>
        /// <returns></returns>
        public static NguoiDungViewModel layNguoiDungTheoMaNguoiDung(int maNguoiDung)
        {
            return Service.executeDataReader<NguoiDungViewModel>
                (
                    "layNguoiDungTheoMaNguoiDung",
                    new object[]
                    {
                        maNguoiDung
                    }
                );
        }
        /// <summary>
        /// Lấy người dùng theo tên đăng nhập
        /// </summary>
        /// <param name="tenDangNhap">Tên đăng nhập</param>
        /// <returns></returns>
        public static NguoiDungViewModel layNguoiDungTheoTenDangNhap(string tenDangNhap)
        {
            return Service.executeDataReader<NguoiDungViewModel>
                (
                    "layNguoiDungTheoTenDangNhap",
                    new object[]
                    {
                        tenDangNhap
                    }
                );
        }
       
        /// <summary>
        /// Thêm người dùng
        /// </summary>
        /// <param name="nguoiDung">Gồm: Tên đăng nhập, mật khẩu, email, họ tên, số điện thoại ("" nếu không có)</param>
        public static int themNguoiDung(NguoiDungDataModel nguoiDung)
        {
            return executeScalar<int>
                (
                    "themNguoiDung",
                    new object[] 
                    {
                        nguoiDung.tenDangNhap,
                        nguoiDung.matKhau,
                        nguoiDung.email,
                        nguoiDung.hoTen,
                        (nguoiDung.soDienThoai == "") ? (object)DBNull.Value : nguoiDung.soDienThoai
                    }
                );
        }
        /// <summary>
        /// Lấy người dùng theo mã nhóm quyền
        /// </summary>
        /// <param name="maNhomQuyen">Mã nhóm quyền</param>
        /// <returns></returns>
        public static List<NguoiDungViewModel> layNguoiDungTheoMaNhomQuyen(int maNhomQuyen)
        {
            return executeDataReader_List<NguoiDungViewModel>
                (
                    "layNguoiDungTheoMaNhomQuyen",
                    new object[]
                    {
                        maNhomQuyen
                    }
                );
        }
        /// <summary>
        /// Cập nhật mật khẩu theo mã người dùng
        /// </summary>
        /// <param name="maNguoiDung">Mã người dùng</param>
        /// <param name="matKhau">Mật khẩu mới</param>
        public static bool capNhatMatKhauTheoMaNguoiDung(int maNguoiDung, string matKhau)
        {
            return executeNonQuery
                (
                    "capNhatMatKhauTheoMaNguoiDung",
                    new object[]
                    {
                        maNguoiDung,
                        matKhau
                    }
                );
        }
        /// <summary>
        /// Lấy người dùng theo thông tin và người dùng đó chưa tham gia khóa học
        /// </summary>
        /// <param name="thongTin">Thông tin</param>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <returns></returns>
        public static List<NguoiDungViewModel> layNguoiDungTheoThongTinVaChuaVaoKhoaHoc(string thongTin, int maKhoaHoc)
        {
            return Service.executeDataReader_List<NguoiDungViewModel>
                (
                    "layNguoiDungTheoThongTinVaChuaVaoKhoaHoc",
                    new object[]
                    {
                        thongTin,
                        maKhoaHoc
                    }
                );
        }
        /// <summary>
        /// Lấy tên trường của bảng người dùng
        /// </summary>
        /// <returns></returns>
        public static string layTenTruongNguoiDung()
        {
            return Service.executeScalar<string>
                (
                    "layTenTruongNguoiDung",
                    new object[0]
                );
        }
        /// <summary>
        /// Lấy người dùng theo mã loại người dùng
        /// </summary>
        /// <param name="maLoaiNguoiDung">Mã loại người dùng</param>
        /// <returns></returns>
        public static List<NguoiDungViewModel> layNguoiDungTheoMaLoaiNguoiDung(int maLoaiNguoiDung)
        {
            return Service.executeDataReader_List<NguoiDungViewModel>
                (
                    "layNguoiDungTheoMaLoaiNguoiDung",
                    new object[]
                    {
                        maLoaiNguoiDung
                    }
                );
        }

        /// <summary>
        /// Lấy người dùng theo email
        /// </summary>
        /// <param name="email">email</param>
        /// <returns></returns>
        public static NguoiDungViewModel layNguoiDungTheoEmail(string email)
        {
            return Service.executeDataReader<NguoiDungViewModel>
                (
                    "layNguoiDungTheoEmail",
                    new object[]
                    {
                        email
                    }
                );
        }

        /// <summary>
        /// Lấy danh sách người dùng không thuộc nhóm quyền
        /// </summary>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <param name="maNhomQuyen">Mã nhóm quyền</param>
        /// <returns>Mã, họ tên</returns>
        public static List<NguoiDungViewModel> layNguoiDungTheoMaKhoaHocVaMaNhomQuyenVaThongTin_TimKiemThanhVienKhongCuaNhomQuyen(int maKhoaHoc, int maNhomQuyen, string thongTin)
        {
            return executeDataReader_List<NguoiDungViewModel>
                (
                    "layNguoiDungTheoMaKhoaHocVaMaNhomQuyenVaThongTin_TimKiemThanhVienKhongCuaNhomQuyen",
                    new object[]
                    {
                        maKhoaHoc,
                        maNhomQuyen,
                        thongTin
                    }
                );
        }
    }
}